package com.iwhalecloud.bss.kite.cucc.service.attr.linkhandler;

import com.iwhalecloud.bss.kite.common.constant.KeyConsts;
import com.iwhalecloud.bss.kite.common.util.KiteBeanUtils;
import com.iwhalecloud.bss.kite.common.util.KiteStringUtils;
import com.iwhalecloud.bss.kite.cucc.service.attr.handler.UserAddressIfBroadcastAttrHandler;
import com.iwhalecloud.bss.kite.dataservice.cache.AttrValueCache;
import com.iwhalecloud.bss.kite.dataservice.entity.AttrValue;
import com.iwhalecloud.bss.kite.listener.handler.attr.annotation.AttrHandler;
import com.iwhalecloud.bss.kite.listener.handler.attr.impl.AbstractAttrLinkageHandler;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttr;
import com.iwhalecloud.bss.kite.manager.inst.KiteAttrValue;
import com.iwhalecloud.bss.kite.manager.inst.KiteInst;
import com.iwhalecloud.bss.kite.service.attr.AttrData;
import com.ztesoft.bss.common.util.SpringUtil;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @Classname UserAddressIfBroadcastAttrLinkHandler
 * @Description 用户地址是否需要广播
 *     用户地址是否需要广播=否，IP地址来源  枚举值  展示  联通分配
 *                         接入省网/城域网自治域号  隐藏
 *     用户地址是否需要广播=是，IP地址来源  枚举值  展示  客户自带、客户自带且联通分配
 *                         接入省网/城域网自治域号  显示
 * @Author zhang.song
 * @Date 2022-03-10 10:51
 */
@Service
@AttrHandler(UserAddressIfBroadcastAttrHandler.class)
public class UserAddressIfBroadcastAttrLinkHandler extends AbstractAttrLinkageHandler<AttrData> {


    @Override
    public void handle(KiteAttr attr, KiteInst inst, AttrData data) {
        // IP地址来源
        KiteAttr ipSourceAttr = inst.getAttr("2_0000060");
        if (Objects.nonNull(ipSourceAttr)) {
            List<AttrValue> attrValueList = AttrValueCache.get(ipSourceAttr.getAttrId());
            List<KiteAttrValue> kiteAttrValueList = KiteBeanUtils.copyPropsForList(attrValueList, KiteAttrValue.class);
            List<KiteAttrValue> kiteAttrValues;
            if(KiteStringUtils.isEqual(attr.getValue(), "1_0000106")) {
                kiteAttrValues = kiteAttrValueList.stream().filter(temp -> KiteStringUtils.equalsAny(temp.getAttrValue(), "1_0000259","110015550")).collect(Collectors.toList());

                if(!KiteStringUtils.equalsAny(ipSourceAttr.getValue(), "1_0000259","110015550")) {
                    ipSourceAttr.setValue("1_0000259");
                }
            } else {
                kiteAttrValues = kiteAttrValueList.stream().filter(temp -> KiteStringUtils.isEqual(temp.getAttrValue(), "1_0000258")).collect(Collectors.toList());

                ipSourceAttr.setValue("1_0000258");
            }
            ipSourceAttr.setAttrValues(kiteAttrValues);

            String valueDesc = kiteAttrValues.stream().filter(temp -> KiteStringUtils.isEqual(temp.getAttrValue(), ipSourceAttr.getValue())).findAny().map(KiteAttrValue::getAttrValueName).orElse(null);
            ipSourceAttr.setValueDesc(valueDesc);
        }

        // 接入省网/城域网自治域号
        KiteAttr autonomousAttr = inst.getAttr("200001371");
        if (Objects.nonNull(autonomousAttr)) {
            if(KiteStringUtils.isEqual(attr.getValue(), "1_0000106")) {
                autonomousAttr.setShowType(KeyConsts.PROD_ATTR_SHOW_TYPE_D);
            } else {
                autonomousAttr.setShowType(KeyConsts.PROD_ATTR_SHOW_TYPE_E);
            }
        }

        // 多级联动情况，调下级联动（IP地址来源）
        LocalIPAddressSourceAttrLinkHandler localIPAddressSourceAttrLinkHandler = SpringUtil.getBean(LocalIPAddressSourceAttrLinkHandler.class);
        localIPAddressSourceAttrLinkHandler.handle(ipSourceAttr, inst, data);
    }

    @Override
    public void handleStyle(KiteAttr attr, KiteInst inst, AttrData data) {

    }
}
